#ifndef _DESIRES_H_
#define _DESIRES_H_

#include <irrlicht.h>
#include <iostream>
#include <fstream>
#include <map>
#include <stdio.h>
#include <utility>
#include <list>
#include <string>


/*
Each desire of every character is stored in a map
containing the name and the value of the desire.
Desires can be diffent using template's name in the
npc config file
*/

class World;

class Desires
{
      protected:
                // the behaviour name
                std::string behaviour__ ;
                // the list of pair (desire name, value)
                std::map<std::string,float> desires__;
      
      public:
             Desires(const std::string& behaviour);
             std::pair<std::string,float> getHighestValue() ;
	     bool applyModifier(std::pair<std::string,float> modifier);
             void applyReward(std::list<std::pair<std::string,float> > reward);	
             float getDesireValue(std::string desire);
	     std::map<std::string,float>& getList() ;
	     /*! Increase all actives desires */
	     void naturalGrowth();
             	
             std::string getBehaviourName();

       	     friend std::ostream& operator<< (std::ostream& os, const Desires& d);
} ;

#endif


